package wenjun.du.androidart.ipc

import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_ipc.*
import wenjun.du.androidart.R
import wenjun.du.androidart.ipc.aidl.AidlActivity
import wenjun.du.androidart.ipc.messenger.MessengerActivity

/**
 * 跨进程方式：
 * 文件
 * intent(三个组件activity service broadCast)
 * Messenger(底层是AIDL)
 * AIDL
 * ContentProvider(底层是AIDL)
 * Socket(网络通讯)
 *
 *
 * android系统为一个进程分配了对应的虚拟机 如果在同一个程序中开启多个进程 操作的是同一套代码
 * 那么不同进程中会有不同的代码副本 ; application对象会重复创建
 *
 * 查看进程的adb命令：adb shell ps | grep "包名"
 * android中跨进程通讯：
 *
 * 多进程：一个程序中开启了多个进程和两个不同程序之间的通讯都算进程间通讯
 * Android中特有的进程间通讯：Binder
 *
 *前提知识：序列化方式：serializable和parcelable
 *
 * 跨进程通讯重点AIDL:
 * 实现流程； AidlActivity中的实现流程
 * 流程图：
 *
 *
 *
 * 跨进程通讯的几种方式：
 * bundle 四大组件的通讯方式，传递bundle支持的数据类型
 * 文件：不同进程对文件的读写 进程A将可序列化的对象写入文件 进程B将可序列化的对象读出
 *
 * Messenger：底层封装的是AIDL,源码中可以看出，通过继承xxx.stub实现的Binder类就是服务端代码
 * 通过xxx.stub.asInterface()就是客户端代码
 *
 *
 *
 *
 * */
class IpcActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ipc)
        messenger.setOnClickListener {
            val intent = Intent(this, MessengerActivity::class.java)
            startActivity(intent)
        }

        aidl.setOnClickListener {
            val intent = Intent(this, AidlActivity::class.java)
            startActivity(intent)
        }
    }
}